#ifndef TREE_H_INCLUDED
#define TREE_H_INCLUDED

#include <iostream>
#include <string>
#include <list>

using namespace std;

class cNode{
public:
      cNode(unsigned char initial_znak, int initial_waga, int initial_licznik, cNode *rodzic);
      unsigned char znak;
      int waga;
      int licznik; //licznik elementow z tabeli kodow ktore nie zostaly wykorzystane ?
      cNode *Left, *Right, *Parent;

      friend class cTree;
};

class cTree{
public:
    cNode *head;
    cNode *nyt;
    void vShow_tree(cNode *node);
    void vAdd_new_node(unsigned char znak, cNode *wierzcholek);
    cTree(int rozmiar);
    cNode *Search_znak(cNode *aktualny, unsigned char znak);
    string sNyt_path(cNode *wsk, string &path);
    void vPath(cNode *aktualny, string &path);
    int iRozmiar_alfabetu;

    bool bIs_nyt(cNode *wsk);
    bool bIs_znak(cNode *wsk);
    bool bIs_rodzic(cNode *wsk);
    void vSwap_nodes(cNode *wsk1, cNode *wsk2);
    void vSearch_biggest_in_block(cNode *head, cNode *aktualny, cNode *&najwiekszy, int &licznik);

};
#endif // TREE_H_INCLUDED
